introduction to problem solving